#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
//在 C++ 中，遍历数组一共有三种形式，根据代码提供的上下文填空：
// 对于数组 array
int maxSubsetSum(vector<int> array) {
  int total = 0;
  int max = 0;
  for(int gap = 1; gap < array.size() - 1; ++gap) {
    //cout<<array.size()<<endl;
    for(int start = 0; start < gap + 1; ++start) {
      //cout<<start<<endl;
      for(int pos = start; pos < array.size(); pos = pos + gap + 1) {
        //cout<<pos<<endl;
        total += array[pos];
      }
      //cout<<total<<endl;
      if (max < total) {
        max = total;
        //cout<<max<<endl;
      };
      total =0;
    }
  }
  return max;
}
int main() {
  vector<int> array {1, 2, 3, 4, 5};
  int result = maxSubsetSum(array);
  cout<<"所有不相邻数字的最大和为"<<result<<endl;
// 1. 传统按数组位置遍历：
  for (int i = 0; i < array.size(); ++i) {
    int res = array[i];
    cout<<"遍历结果为"<<res<<" "; 
  }
  cout<<endl;
// 2. 按照迭代器遍历
  for (auto beg = array.begin(); beg != array.end(); ++beg) {
    cout<<"遍历结果为"<<*beg<<" ";
  }
  cout<<endl;
// 3. 现代 C++ 的简易 for 循环
  for (int n : array) {
    cout<<"遍历结果为"<<n<<" ";
  }
  cout<<endl;
//在遍历数组时，说说你认为上面这三种方式的异同：
// 结果没有多大区别，就是简易程度上有区别
//对于下面的数组：
  vector<vector<int>> arr {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
  };
  //*(arr.begin()) 的值是 {1, 2, 3};

  //*(arr.begin() + 1) 的值是 {4, 5, 6};

  //*(arr.end() - 1) 的值是 {4, 5, 6};

  //arr.size() 的值是 3, arr[0].size() 的值是 3；

  //计算 arr 行数的方法是 arr[0].size()，计算 arr 列数的方法是 arr.size()；

  //算法编程
  //编写一个函数，计算一个数组中，所有不相邻数字的最大和。如果数组为空，则返回 0。

  //提示：使用之前我们计算找零钱问题时的动态编程思路。

  //例如，对于数组 array = [75, 105, 120, 75, 90, 135]，它的所有不相邻数字的最大和是 330，也就是 75 + 120 + 135。
}